package com.hbhmzy.contact;

import android.util.Base64;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

class Base64Util {

	private static final String TAG = "Base64Util";

	/**
	 * base64 解密
	 */
	static void decode(String dbPath) {
		FileInputStream in;
		FileOutputStream out;
		File file = new File(dbPath);
		Log.e("==if file.exists==", file.exists()+"");
		// 若数据库文件存在
		if(file.exists()){  
			try {
				in = new FileInputStream(dbPath);
				byte[] data = new byte[in.available()];
				in.read(data);
				// 删除原文件
				file.delete();
				byte[] DeResult = Base64.decode(data, 0, data.length, Base64.DEFAULT); 
				// 写回密文
				out = new FileOutputStream(dbPath);
				out.write(DeResult, 0, DeResult.length);
				in.close();
				out.close();
				Log.e(TAG, "db decode sucsess");
			} catch (IOException e) {
				Log.e(TAG, "IOException:decode db error!");
				e.printStackTrace();
			} catch (IllegalArgumentException e){
				//可能的原因：数据库文件上次解密之后还未完成加密（如程序直接通过后台一键杀死），再次解密时会报此异常
				Log.e(TAG, "IllegalArgumentException:decode db error!");
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * base64 加密
	 */
	static void encode(String dbPath) {
		FileInputStream in;
		FileOutputStream out;
		File file = new File(dbPath);
        Log.e("==if file.exists==", file.exists()+"");
		// 若数据库文件存在
		if(file.exists()){  
			try {
				in = new FileInputStream(dbPath);
				byte[] data = new byte[in.available()];
				in.read(data);
				// 删除原文件
				file.delete();
				byte[] EnResult = Base64.encode(data, 0, data.length, Base64.DEFAULT); 
				// 写回密文
				out = new FileOutputStream(dbPath);
				out.write(EnResult, 0, EnResult.length);	
				in.close();
				out.close();
				Log.e(TAG, "db encode sucsess");
			} catch (IOException e) {
				Log.e(TAG, "IOException:encode db error!");
				e.printStackTrace();
			} catch (IllegalArgumentException e){
				Log.e(TAG, "IllegalArgumentException:encode db error!");
				e.printStackTrace();
			}
		}
	}
}
